up: programming:windows:windows  
programming windows
windows message decoding
What links here?
The operating system communicates and controls each window by sending it a barrage of messages.

If you create a window of your own, you implement it's functionality by responding to the appropriate messages. This starts with a message handling function that is just a giant switch statement.

LRESULT CALLBACK MainWndWndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{


switch (message) { case WM_COMMAND: return HANDLE_WM_COMMAND(hwnd, wparam, lparam, MainWndOnCommand); case WM_CREATE: MainWndOnCreate(hwnd); return 0; case WM_DESTROY: PostQuitMessage(0); //signal end of application return 0; case WM_SIZE: return HANDLE_WM_SIZE(hwnd, wparam, lparam, MainWndOnSize); default: return DefWindowProc(hwnd,message,wparam,lparam); //let system deal with msg } }
Any messages you don't want to respond to should be sent to DefWindowProc, which supplies the default windows response to the message.

The windowsx.h header file provides "[message crackers]" that convert and translate the message arguments into the appropriate parts. In the example above, the HANDLE_WM_COMMAND message cracker is used to generate a call to a function which then handles the WM_COMMAND message:

void MainWndOnCommand(HWND hwnd, int id, HWND hwnd_control, UINT notify_code)
{
    if (hwnd_control) {
    }
    else {
        switch (id) {
        case IDM_ONE:   
            strcpy(buffer, "one ");
            CopyStuffIn(SF_TEXT, SFF_SELECTION);
            break;
        case IDM_TWO:   
            strcpy(buffer, "two ");
            CopyStuffIn(SF_TEXT, SFF_SELECTION);
            break;
        case IDM_THREE: 
            strcpy(buffer, "three ");
            CopyStuffIn(SF_TEXT, SFF_SELECTION);
            break;
        case IDM_RTF:
            strcpy(buffer, rtfPrefix);
            strcat(buffer, rtfPostfix);
            CopyStuffIn(SF_RTF, 0);
            break;
        case IDM_STUFF:
            strcpy(buffer, stuff);
            CopyStuffIn(SF_RTF, 0);
            break;
        case IDM_BLACK:
            SetColor(255, 255, 255);
            break;
        case IDM_BLUE:
            SetColor(0, 0, 255);
            break;
        case IDM_RED:
            SetColor(255, 0, 0);
            break;
        case IDM_NORMAL:
            SetFont(CFM_BOLD | CFM_ITALIC, 0);
            break;
        case IDM_BOLD:
            SetFont(CFM_BOLD, CFE_BOLD);
            break;
        case IDM_ITALIC:
            SetFont(CFM_ITALIC, CFE_ITALIC);
            break;
        case IDM_STRIKE:
            SetFont(CFM_STRIKEOUT, CFE_STRIKEOUT);
            break;
        case IDM_DISABLE:
            SetFont(CFM_DISABLED, CFE_DISABLED);
            break;
        case IDM_UNDER:
            SetFont(CFM_UNDERLINE, CFE_UNDERLINE);
            break;
        }
    }
}
programming:windows:windows message decoding
filename:programming:windows:windows message decoding
filename:programming%3Awindows%3Awindows%20message%20decoding
last edit:March 24 2010 19:26:14 (5156 days ago)
ct = 1714967191.000000 = May 05 2024 23:46:31
ft = 1269473174.000000 = March 24 2010 19:26:14
dt = 445494017.000000